package tests

import org.scalatest._
import tp1._

class MateriaTest extends FlatSpec {

  var orga = new Materia("Orga")
  orga.initialize(2012, 1)
  var alumno = new Estudiante("alguien", 11111)
  var profesor = new Docente("profe")
  var otroCurso = new Curso(profesor)
  var alumno1 = new Estudiante("uno", 11111)
  var alumno2 = new Estudiante("dos", 11111)
  otroCurso.anotarAlumno(alumno1)
  otroCurso.anotarAlumno(alumno2)
  var abandonada = new Abandonada()
  abandonada.initialize(0, new Materia("BD"), otroCurso)
  var aprobada = new Aprobada()
  aprobada.initialize(7, new Materia("Mate"), new Curso(new Docente("pepe")))
  var desaprobada = new Desaprobada()
  desaprobada.initialize(3, new Materia("BD"), otroCurso)
  alumno1.actualizarFoja(abandonada)
  alumno1.actualizarFoja(aprobada)
  alumno2.actualizarFoja(desaprobada)
  orga.agregarUnCurso(otroCurso)
  
  "una materia" should "deberia agregar un curso" in {
    var bd = new Materia("Orga")
    bd.initialize(2012, 1)
    bd.agregarUnCurso(new Curso(new Docente("profe")))
    assert(bd.cursos.size ==1)
  }
  
  "una materia" should "pasarle la nota a un alumno" in {
    orga.pasarNota(alumno, new Abandonada())
    assert(alumno.foja.notas.size == 1)
  }
  
  "una materia" should "inscribir un alumno" in {
    var curso = new Curso(new Docente("profe"))
    orga.inscribirAlumno(alumno, curso)
    assert(curso.estudiantes.contains(alumno))
    assert(alumno.cursos.contains(curso))
  }
  
  "una materia" should "darme sus cursadas" in {
    assert(orga.getCursadas.size == 2)
  }
  
  "una materia" should "darme 0 cursada aprobada" in {
    assert(orga.cursadasAprobadas == 0)
  }

  "un materia" should "darme una cursada abandonada" in {
    assert(orga.cursosAbandonados == 1)
  }

  "un materia" should "darme 0.0 de cursadas aprobadas sobre iniciadas" in {
    assert(orga.cursosAprobadoSobreIniciados == 0.0)
  }

  "un materia" should "darme 3.0 en promedio con aplazos" in {
    assert(orga.promedioConAplazos == 3.0)
  }

  "un materia" should "devolver una tabla de notas" in {
    var tabla = orga.tablaDeNotas
    assert(tabla(1) == 0)
    assert(tabla(2) == 0)
    assert(tabla(3) == 1)
    assert(tabla(4) == 0)
    assert(tabla(5) == 0)
    assert(tabla(6) == 0)
    assert(tabla(7) == 0)
    assert(tabla(8) == 0)
    assert(tabla(9) == 0)
    assert(tabla(10) == 0)
    
  }
  
}